package com.henu.swface.activity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.henu.swface.R;

public class ShowMap extends AppCompatActivity {
    //广州东华职业学院经纬度(23.26035,113.479755)；
    private double endlatitude = 23.26035;    //纬度信息
    private double endlongitude = 113.479755;//经度信息

    private MapView mMapView = null;
    BaiduMap baiduMap;
    public LocationClient mLocationClient;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mLocationClient = new LocationClient(getApplicationContext());
        //声明LocationClient类
        mLocationClient.registerLocationListener(new MyLocationListener());
        //注册监听函数

        setContentView(R.layout.activity_show_map);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        baiduMap = mMapView.getMap();//提供了地图对象的操作方法与接口
        InitLocation();
        mLocationClient.start();

    }

    public void InitLocation(){
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选，设置定位模式，默认高精度
        //LocationMode.Hight_Accuracy：高精度；
        //LocationMode. Battery_Saving：低功耗；
        //LocationMode. Device_Sensors：仅使用设备；
        option.setCoorType("bd09ll");
        //可选，设置返回经纬度坐标类型，默认GCJ02
        //GCJ02：国测局坐标；
        //BD09ll：百度经纬度坐标；
        //BD09：百度墨卡托坐标；
        //海外地区定位，无需设置坐标类型，统一返回WGS84类型坐标
        option.setScanSpan(0);
        //可选，设置发起定位请求的间隔，int类型，单位ms
        //如果设置为0，则代表单次定位，即仅定位一次，默认为0
        //如果设置非0，需设置1000ms以上才有效
        option.setIsNeedAddress(true);//反编译获得具体位置，只有网络定位才可以
        mLocationClient.setLocOption(option);
    }
    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {

            double latitude = location.getLatitude();    //获取纬度信息
            double longitude = location.getLongitude();    //获取经度信息
            float radius = location.getRadius();    //获取定位精度，默认值为0.0f
            String country = location.getCountry();//国家
            String province = location.getProvince();//省
            String addrStr = location.getAddrStr();//地址

            Log.i("ccg",
                    "\n纬度:" +latitude
                            +"\n经度:" +longitude
                            +"\n定位精度:"+radius
                            +"\n国家:"+country
                            +"\n省:"+province
                            +"\n地址:"+addrStr);

            LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());//获取纬度信息,获取经度信息
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(latLng);//设置地图中心点
            baiduMap.animateMapStatus(update);//以动画方式更新地图状态
            update = MapStatusUpdateFactory.zoomTo(17f);//设置地图缩放级别
            baiduMap.animateMapStatus(update);//更新地图
            BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_map_mark);
            OverlayOptions options = new MarkerOptions()
                    .position(latLng)
                    .icon(bitmap);
            baiduMap.addOverlay(options);

            LatLng start = new LatLng(latitude,longitude);
            LatLng ned = new LatLng(endlatitude,endlongitude);
            String result = getDistance(start,ned);
            //定义对话框
            AlertDialog.Builder dialog = new AlertDialog.Builder(ShowMap.this);
            dialog.setTitle("提示");
            dialog.setMessage("您与学校距离："+result);
            //设置取消按钮，并添加事件监听器
            dialog.setPositiveButton("开始上课", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //关闭会话框
                    dialog.dismiss();
                }
            });
            //设置确定按钮，并添加事假监听器
            dialog.setNegativeButton("退出", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //关闭对话框
                    dialog.dismiss();
                    //关闭应用
                    System.exit(0);

                }
            });
            //显示对话框
            dialog.show();

        }
    }



    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume ()，实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause ()，实现地图生命周期管理
        mMapView.onPause();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy()，实现地图生命周期管理
        mMapView.onDestroy();
    }

    /**
     * 坐标与目标距离
     *(113.479351,23.260553)
     */

    public String getDistance(LatLng start,LatLng end){
        double lat1 = (Math.PI/180)*start.latitude;
        double lat2 = (Math.PI/180)*end.latitude;

        double lon1 = (Math.PI/180)*start.longitude;
        double lon2 = (Math.PI/180)*end.longitude;

        //地球半径
        double R = 6371;

        //两点间距离 km，如果想要米的话，结果*1000
        double d =  Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R;
        if(d<1){
            return (int)d*1000+"m";
        }
        else{
            return String.format("%.2f",d)+"km";
        }

    }



}
